package 力扣.数组;

import java.util.*;

public class 数组形式的整数加法989 {
    public static void main(String[] args) {
//        int[] ints = {1, 2, 0, 0};
//        int[] ints = {2,1,5};
//        int[] ints = {9,9,9,9,9,9,9,9,9};
        int[] ints = {6};
        List<Integer> integers = addToArrayForm2(ints, 809);
        System.out.println(integers);

    }
//    public static List<Integer> addToArrayForm(int[] A, int K) {
//          int te = 0;
//          for (int a : A){
//              te *= 10;
//              te += a;
//          }
//          te = te + K;
//
//        List<Integer> re = new List<>();
//
//        String s = te + "";
//        //如何让数字转为单个数字（顺序不变）？使用 除法 ，然后反转
//        for (int i = 0; i < s.length(); i++) {
////            re.add(Integer.parseInt(s.charAt(i)));
//        }
//    }

    /**
     * 通过判断让 数组中的元素 和 K进行同位计算 ，计算结果大于10 则进 1
     * 此时有两种可能： K < 数组元素组成的数字    K > 数组元素组成的数字
     *
     * @param A
     * @param K
     * @return
     */
    public static List<Integer> addToArrayForm2(int[] A, int K) {
        int te = 0;
        for (int i = A.length-1; i >= 0 ; i--) {
            A[i] += te;
             if (K != 0  || te != 0 ){//当K 和 te 都为 0 退出 for循环
                 int te1 = K % 10;
                 K /= 10;
                 int te2 = A[i] + te1;

                 if (te2 >= 10){//进1
                     A[i] = te2 % 10; //改变数组元素
                     te = te2/10;// te准确来说变为1（因为是加法）
                 }else {//不进1
                     A[i] = te2;
                     te = 0;
                 }

             }else {
                 break;
             }

        }
//        System.out.println(Arrays.toString(A));

        ArrayList<Integer> list = new ArrayList<>();
        K += te;//此时 K 是大于集合元素的数字（准确来说是位数）
        while (K != 0){
              list.add(K%10);//添加到集合中（反序的，需要反转一下）
              K /= 10;
        }
        Collections.reverse(list);//反转集合元素
        for (int a : A){
            list.add(a);//添加数组中的元素
        }

        return list;
    }

}
